// 播放音频
// 调用示例

// Audio.init([{src: ''}]);
// Audio.play()
// Audio.pause();
// var eventCallback = function(eventType) {}
// var progressCallback = function(progress) {}
// Audio.addEvent(eventCallback, progressCallback)
(function() {
    var _audio = {};
    // 初始化
    // list 音频列表 必传 -- 因为课程音频会有多个
    // list.length大于1时，会自动播放下一个
    // isBackground 是否背景播放 可选 默认false
    // isLoop 是否列表循环播放 可选 默认false
    _audio.init = function(list, isBackground, isLoop) {
        this.list = list || [];
        this.isBackground = !!isBackground;
        this.playIndex = 0; // 播放的音频索引，默认0
        this.duration = 0; // 播放时长 处理为字符串用Vue的filter->playTime
        this.totalTime = 0; // 音频时长 处理为字符串用Vue的filter->playTime
        this.playStatus = 0; // 0 未播放 1 播放中 2 暂停
        this.loop = !!isLoop;

        if(!this.audio) {
            var audio = document.createElement('audio');
            this.audio = audio;
        }
        // if (navigator.appName=="Microsoft Internet Explorer"){//IE浏览器
        //     audio.innerHTML = '<bgsound src='+'"'+sound+'"'+' loop="infinite">';
        // } else {//其他浏览器
        //     audio.innerHTML = '<embed src='+'"'+sound+'"'+' hidden="true" autostart="true" loop="true">';
        // }
    };
    // 设置音频路径和起始播放时间
    // 目前只有单个音频 
    _audio.insertBackgroundHtml = function(src, duration) {
        // 同一个播放源，不做处理
        this.playStatus = 1;
        if(this.audio.currentSrc == src) return;
        // 设置起始播放时间
        this.audio.currentTime = duration;
        this.totalTime = this.audio.duration;
        this.duration = this.audio.currentTime;
        // 播放源
        this.audio.src = src;
        // 设置背景播放
        if(this.isBackground) {
            var _html = '';
            if (navigator.appName == "Microsoft Internet Explorer"){//IE浏览器
                _html = '<bgsound src="'+ src +'">';
            } else {//其他浏览器
                _html = '<embed src="'+ src +'" hidden="true">';
            }
            this.audio.innerHTML = _html;
        }
    };
    // 播放
    // index 播放的音频索引，可选，默认0
    // isLoop 是否单曲循环 可选 默认false
    // duration 起始播放时间，可选，单位s，默认0，目前无此需求，预留
    // 当播放源相同时，调用方法只能继续播放，不能快进快退
    // 当播放源不同是，调用方法等于重新开始，设置起始播放时间
    _audio.play = function(index, isLoop, duration) {
        index = index || 0;
        duration = duration || 0;
        this.playIndex = index;
        var src = this.list[this.playIndex].src;
        // 设置播放源，是否背景音乐，播放起始时间
        this.insertBackgroundHtml(src, duration);
        this.audio.play();
        this.audio.loop = !!isLoop;
    };
    // 暂停
    _audio.pause = function() {
        this.audio.pause();
        this.playStatus = 2;
    };
    // 播放暂停的切换
    _audio.toggle = function() {
        if(this.playStatus == 1) {
            // 进行暂停
            this.pause();
        }else {
            // 进行播放
            this.play(this.playIndex);
        }
    };
    // 快进快退
    // duration 快进或者快退的时间，大于0时快进，小于0时快退
    // 快退小于0时，则从开始播放
    // 快进大于音频时长时，则停止播放
    _audio.fastSeek = function(duration) {
        if(typeof duration === 'number') {
            var currentTime = this.audio.currentTime + duration;
            if(currentTime < 0) {
                // 快退小于0时，则从开始播放
                this.audio.currentTime = 0;
            }else if(currentTime > this.audio.duration) {
                // 快进大于音频时长时，则停止播放
                this.audio.currentTime = this.audio.duration;
                this.audio.pause();
            }else {
                this.audio.currentTime = currentTime;
            }
            this.duration = this.audio.currentTime;
        }
    };
    // 添加播放事件
    // 暂停，停止，播放，下一首  暂无加载事件
    _audio.addPlayEvent = function(playCallback) {
        // 开始播放
        this.audio.addEventListener('play', function() {
            _audio.playStatus = 1;
            playCallback(1);
        });
        // 播放结束
        this.audio.addEventListener('ended', function() {
            if(_audio.isLoop && !_audio.audio.loop) {
                // 列表循环
                if(_audio.playIndex+1 != _audio.list.length) {
                    _audio.playIndex += 1;
                }else {
                    _audio.playIndex = 0;
                }
                _audio.play(_audio.playIndex);
                playCallback(3, _audio.playIndex);
            }else if(_audio.audio.loop) {
                // 单曲循环 弃用，loop为true是，不走ended事件
                _audio.audio.currentTime = 0;
                _audio.play(_audio.playIndex);
            }else {
                _audio.playStatus = 0;
                playCallback(0);
            }
        });
        // 播放暂停
        this.audio.addEventListener('pause', function() {
            _audio.playStatus = 2;
            playCallback(2);
        });
    };
    // 添加播放进度事件
    // 实时通知当前播放进度
    _audio.addProgressEvent = function(progressCallback) {
        this.audio.addEventListener('timeupdate', function(e) {
            _audio.duration = e.currentTarget.currentTime;
            progressCallback(_audio.duration);
        });
    };


    // 对外开放的方法
    var Audio = {};
    Audio.init = function(list, isBackground, isLoop) {
        _audio.init(list, isBackground, isLoop);
    };
    Audio.play = function(index, isLoop, duration) {
        _audio.play(index, isLoop, duration);
    };
    Audio.pause = function() {
        _audio.pause();
    };
    // 播放暂停的切换
    Audio.toggle = function() {
        _audio.toggle();
    };
    Audio.fastSeek = function(duration) {
        _audio.fastSeek(duration);
    };
    // 添加事件回调
    // playCallback 播放事件
    // progressCallback 播放进度事件
    // 回调示例，playCallback(eventType)
    // eventType 1 播放 0 停止 2 暂停 3 下一首
    // progressCallback(progress)
    // progress 当前进度，单位s
    Audio.addEvent = function(playCallback, progressCallback) {
        _audio.addPlayEvent(playCallback);
        _audio.addProgressEvent(progressCallback);
    };
    Audio.getTotalTime = function() {
        return _audio.totalTime;
    };
    Audio.getDuration = function() {
        return _audio.duration;
    };
    Audio.getPlayStatus = function() {
        return _audio.playStatus;
    };
    // 设置列表循环
    Audio.setListLoop = function(isLoop) {
        _audio.loop = !!isLoop;
    };
    // 设置单曲循环
    Audio.setAudioLoop = function(isLoop) {
        _audio.audio.loop = !!isLoop;
    };

    window.Audio = Audio;
}())